The present invention relates generally to network data storage systems, and more specifically to simulating a network data storage operating system as a virtualized operating system of a virtual computer.
As computer networks have become faster and more reliable, the deployment of network data storage systems in enterprise computing environments has become more widespread. In a typical enterprise computing environment, client systems such as computer workstations, database servers, web servers, and other application servers can access data stored remotely from the client systems; typically in one or more central locations. One or more computer networks, e.g., one or more local area networks (LANs) or wide area networks (WANs), connect the client systems to mass storage devices such as disks disposed at the central locations. Such centralized data storage, referred to hereinafter as network data storage, facilitates the sharing of data among many geographically distributed client systems. Network data storage also enables information systems (IS) departments to use highly reliable (sometimes redundant) computer equipment to store their data.
In the typical network data storage environment, specialized computers such as file servers, storage servers, storage appliances, etc. (referred to hereinafter as storage servers) located at the central locations make the data stored on the disks available to the client systems. For example, a storage server can have a monolithic architecture, in which network and data components are contained within a single device. Software running on the storage servers and other software running on the client systems communicate according to well-known protocols, such as the Network File System (NFS) protocol, the Common Internet File System (CIFS) protocol, and the Direct Access File System (DAFS) protocol, to make the data stored on the disks appear to users and application programs as though the data were stored locally on the client systems. Each storage server makes data available to the client systems by presenting or exporting one or more volumes to the client systems. Each volume is configured to store data files, scripts, word processing documents, executable programs, and the like. From the perspective of a client system, each volume can appear to be a single disk drive. However, each volume can represent the storage space in a single storage device, a redundant array of independent disks (RAID) or a RAID set, an aggregate of some or all of the storage space in a set of storage devices, or any other suitable set of storage space.
In addition, multiple storage servers can be arranged in a cluster configuration to form a single storage server system. Such a clustered storage server system has a distributed architecture that includes a plurality of server nodes interconnected by a switching fabric. Each server node typically includes a network module (an N-module), a disk module (a D-module), and a management module (an M-host). The N-module provides functionality that enables a respective node within the clustered system to connect to a client system over a computer network, the D-module provides functionality enabling the respective node to connect to one or more disks, and the M-host provides management functions for the clustered system. A switched virtualization layer is provided below the interface between the N-modules and the client systems, allowing the disks associated with the multiple nodes in the cluster configuration to be presented to the client systems as a single shared storage pool.
In a typical mode of operation, a client system transmits an NFS, CIFS, or DAFS request for data to one of the server nodes within the clustered system. The request typically includes a file handle for a data file stored in a specified volume. The N-module within the node that received the request extracts a volume identifier from the file handle, and uses the volume identifier to index a volume location database (VLDB) to obtain an identification of an aggregate storing the specified volume. The N-module then uses the aggregate identification to locate the D-module responsible for the aggregate, and transmits a request to the D-module for the data on the specified volume using an internal protocol. The D-module executes the request, and transmits, using the internal protocol, a response containing the requested volume data back to the N-module, which in turn transmits an NFS, CIFS, or DAFS response with the requested data to the client system. In this way, the N-modules can export, to the client systems, one or more volumes that are stored on aggregates accessible via the D-modules.
A storage operating system executes on a network data storage system to manage the storage system and to implement file system semantics. The storage operating system must be robust to prevent data loss from error conditions arising while executing on the network data storage system. Accordingly, during development, the storage operating system is generally thoroughly tested before being released for use in actual data serving environments.
One known method of performing tests of a storage operating system during development includes simulating the storage operating system on a host computer by executing portions of the storage operating system as a user-level application on the host computer. During execution of the user-level application on the host computer, simulated disks associated with the simulated storage operating system are represented by files on the host computer's file system. Further, write operations from a disk driver module of the simulated storage operating system are converted to file-level operations by the host's operating system. Similarly, network protocol communications, such as by TCP/IP, are passed from the simulated storage operating system to the host computer's operating system for processing. In addition, to simulate a cluster of storage appliances, two separate instantiations of the simulated storage operating system are executed as separate processes running on the host computer. However, the above-described method of simulating a storage operating system does not provide a simulation of the entire storage operating system as it would normally operate in an actual cluster environment.
It would therefore be desirable to have a system and method of testing, during development, the operation of a clustered storage server system and its associated storage operating system that allows the entire storage operating system to be simulated as it would normally operate in an actual cluster environment. Such a system and method of testing the operation of a clustered storage server system would facilitate the testing of the clustered system on low cost computer hardware platforms.